package com.cloudsea.yunhaistores.service.impl;

import com.cloudsea.yunhaistores.dto.SessionStartDTO;
import com.cloudsea.yunhaistores.entity.Tables;
import com.cloudsea.yunhaistores.mapper.TablesMapper;
import com.cloudsea.yunhaistores.service.SessionService;
import com.cloudsea.yunhaistores.vo.SessionStartVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.UUID;

@Service
public class SessionServiceImpl implements SessionService {

    @Autowired
    private TablesMapper tablesMapper;

    @Override
    @Transactional // 保证查询和更新的原子性
    public SessionStartVO startSession(SessionStartDTO dto) {
        // 1. 根据桌台ID查询桌台信息
        Tables table = tablesMapper.selectById(dto.getTableId());
        if (table == null) {
            throw new RuntimeException("无效的桌台ID");
        }

        String sessionId;

        // 2. 检查桌台状态，判断是创建新会话还是加入已有会话
        if (table.getStatus() == 0 || table.getCurrentSessionId() == null) {
            // 桌台当前是空闲的，需要开启一个新会话
            // a. 生成一个新的、唯一的会话ID
            sessionId = UUID.randomUUID().toString();

            // b. 更新桌台状态
            table.setStatus(1); // 状态变为“使用中”
            table.setCurrentSessionId(sessionId);
            tablesMapper.updateById(table);
        } else {
            // 桌台已在使用中，直接返回当前的会话ID，实现多人加入
            sessionId = table.getCurrentSessionId();
        }

        // 3. 组装VO并返回
        SessionStartVO vo = new SessionStartVO();
        vo.setSessionId(sessionId);
        return vo;
    }
}